package modelo;

import interfaz.IEntidad;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import manejador.ManejadorDeEmpleado;
import manejador.ManejadorDeRole;
import entidad.Empleado;
import entidad.Role;

public class ModeloProfesor extends AbstractTableModel {

	private static final long serialVersionUID = 1L;
	private String[] encabezados = null;
	private List<IEntidad> profesores = null;
	private static ModeloProfesor instancia = null;
	private Empleado profesor = null;
	private ManejadorDeEmpleado manejadorDeEmpleado = null;

	private ModeloProfesor() {
		encabezados = new String[] { "ID Empleado", "Nombre", "Apellido",
				"Sexo", "Direccion", "Cedula", "Telefono", "Role", "Estatus" };
		manejadorDeEmpleado = ManejadorDeEmpleado.getInstancia();
		profesores = manejadorDeEmpleado.getProfesoresActivos();

	}

	public static ModeloProfesor getInstancia() {
		if (instancia == null) {
			instancia = new ModeloProfesor();
		}
		return instancia;
	}

	public String getColumnName(int indice) {
		return encabezados[indice];
	}

	@Override
	public int getColumnCount() {
		return encabezados.length;
	}

	@Override
	public int getRowCount() {
		return profesores.size();
	}

	@Override
	public Object getValueAt(int fila, int columna) {
		String retorno = "";
		profesor = (Empleado) manejadorDeEmpleado.getProfesoresActivos().get(
				fila);
		IEntidad role = ManejadorDeRole.getInstancia().getEntidadPorId(
				profesor.getIdRole());
		profesor.setRole(role);

		switch (columna) {
		case 0:
			retorno = String.valueOf(profesor.getIdEmpleado());
			break;
		case 1:
			retorno = profesor.getNombre();
			break;
		case 2:
			retorno = profesor.getApellido();
			break;
		case 3:
			retorno = profesor.getSexo();
			break;

		case 4:
			retorno = profesor.getDireccion();
			break;
		case 5:
			retorno = profesor.getCedula();
			break;
		case 6:
			retorno = profesor.getTelefono();
			break;
		case 7:
			retorno = ((Role) profesor.getRole()).getNombre();
			break;

		case 8:
			retorno = profesor.getEstatus();
			break;
		}
		return retorno;

	}

	public void actualizarTabla() {
		profesores = manejadorDeEmpleado.getProfesoresActivos();
		fireTableDataChanged();
	}

}
